package fr.chrysalis.ui.utils
{
	import flash.display.FrameLabel;
	import flash.display.MovieClip;
	import flash.utils.Dictionary;
	
	import fr.chrysalis.ui.UIConstants;
	import fr.chrysalis.utils.Debug;

	public class Animation
	{
		/**
		 * Nom de l'animation 
		 */
		public var name:String;
		/**
		 * Numéro de frame du début de l'animation
		 */
		public var begin:int;
		/**
		 * Numéro de frame de fin de l'animation 
		 */
		public var end:int;
		/**
		 * Temps en seconde de l'animation 
		 */
		public var time:int;
		/**
		 * Nombre de frames 
		 */
		public var nbFrame:int;
		
		/**
		 * Ajout d'une animation et définition des frame de début et fin 
		 * @param frameBegin Numéro de frame de début
		 * @param frameEnd Numéro de frame de fin
		 */
		public function Animation(frameBegin:int, frameEnd:int)
		{
			this.begin = frameBegin;
			this.end = frameEnd;
			this.nbFrame = this.end - this.begin;
			this.time = this.nbFrame / UIConstants.FRAME_RATE;
		}
		
		/**
		 * Retourne la durée de l'animation en seconde 
		 * @return 
		 * 
		 */
		public function getTime():Number {
			return this.time;
		}
		
		/**
		 * Analise un movieclip et retourne les animations qu'il contient en fonction des labels 
		 * @param mc MovieClip à analizer
		 * @return Liste des animations
		 * 
		 */
		public static function analize(mc:MovieClip):Dictionary {
			var labels:Array = mc.currentLabels;
			var i:int = 0;
			var nbLabels:int = labels.length;
			var label:FrameLabel;
			var animations:Dictionary = new Dictionary();
			var begin:int;
			var end:int;
			
			for each(label in labels){
				
				if(labels[i+1] != undefined){
					begin = label.frame;
					end = labels[i+1].frame - 1;
				}else{
					begin = label.frame;
					end = mc.totalFrames;
				}
				
				animations[label.name] = new Animation(begin, end);
				animations[label.name].name = label.name;
				i++;
			}
			
			return animations;
		}
	}
}